import G6 from '@antv/g6'
import {
  nodeFontSize,
  nodePadding,
  collapseRadius,
  collapseGap,
  circleRadius,
  circleGap,
} from './graphStyle'

const { getTextSize } = G6.Util

// 对data进行处理，提前计算id，_direction，_wrapWidth，_wrapHeight，_textSize，_short
export default function (data) {
  function recursion(list, deep, prefix, direction) {
    list.forEach((item, index) => {
      item.id = `${prefix}-${index}`
      if (item.type === 'relation-node') {
        const textSize = getTextSize(item.text, nodeFontSize)
        item._textSize = textSize
        item._wrapWidth =
          textSize[0] +
          nodePadding[0] * 2 +
          (circleRadius * 2 + circleGap) +
          (item?.children?.length ? collapseRadius * 2 + collapseGap : 0)
        item._wrapHeight = textSize[1] + nodePadding[1] * 2
      } else if (item.type === 'entity-node') {
        const textSize = getTextSize(item.text, nodeFontSize)
        const subTextSize = item.subText
          ? getTextSize(item.subText, nodeFontSize)
          : null
        item._textSize = textSize
        item._wrapWidth =
          textSize[0] +
          nodePadding[0] * 2 +
          (item?.subText ? subTextSize[0] : 0) +
          (item?.children?.length ? collapseRadius * 2 + collapseGap : 0)
        item._wrapHeight = textSize[1] + nodePadding[1] * 2
        item._short = (item.short || item.text).substring(0, 4)
      } else if (item.type === 'more-node') {
        const textSize = getTextSize(item.text, nodeFontSize)
        const subTextSize = item.subText
          ? getTextSize(item.subText, nodeFontSize)
          : null
        item._textSize = textSize
        item._wrapWidth =
          textSize[0] +
          nodePadding[0] * 2 +
          (item?.subText ? subTextSize[0] : 0) +
          (collapseRadius * 2 + collapseGap)
        item._wrapHeight = textSize[1] + nodePadding[1] * 2
      } else {
        const textSize = getTextSize(item.text, nodeFontSize)
        item._textSize = textSize
        item._wrapWidth = textSize[0] + nodePadding[0] * 2
        item._wrapHeight = textSize[1] + nodePadding[1] * 2
      }

      // 设定方向
      if (deep === 1) {
        item._direction = item.direction || (index % 2 === 0 ? 'right' : 'left')
      } else if (deep > 1) {
        item._direction = direction
      }

      // 处理子节点
      if (item.children?.length > 0) {
        recursion(item.children, deep + 1, item.id, item._direction)
      }
      // 处理隐藏节点
      if (item.hiddenChildren?.length > 0) {
        recursion(item.hiddenChildren, deep + 1, item.id, item._direction)
      }
    })
  }

  recursion([data], 0, '')
  return data
}
